﻿Public Class clCasillaPuerta : Inherits clCasilla : Implements IEquatable(Of clCasillaPuerta)


    Public Sub New(ByVal Objeto As Control)
        MyBase.New(ElSuelo.Accesible, Objeto)
        ImagenPredeterminada = My.Resources.puerta
        If Objeto.GetType = GetType(PictureBox) Then
            TryCast(Objeto, PictureBox).BackgroundImage = ImagenPredeterminada
        End If
    End Sub
    Public Sub New(ByVal objeto As Control, ByVal Abierta As Boolean)
        MyBase.New(ElSuelo.Accesible, objeto)
        If Not Abierta Then _Suelo = ElSuelo.Inaccesible
    End Sub


    ''' <summary>
    ''' Muestra un mensaje, vacío si está abierta.
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public ReadOnly Property MensajeDePuerta As String
        Get
            If Me.Suelo = ElSuelo.Inaccesible = False Then Return "La puerta está cerrada."
            Return ""
        End Get
    End Property

    ''' <summary>
    ''' Cierra la puerta con una llave, si ya está cerrada no se puede volver a cerrar y regresaría false.
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function CerrarPuerta() As Boolean
        If _Suelo = ElSuelo.Accesible Then Return False
        _Suelo = ElSuelo.Inaccesible
        Return True
    End Function

    ''' <summary>
    ''' Abre la puerta, si está abierta o no tiene llaves regresa false.
    ''' </summary>
    ''' <param name="quien">Lugar donde se encuentren las llaves...</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function AbrirPuerta(ByRef quien As clHeroe) As Boolean
        If _Suelo = ElSuelo.Accesible Then Return False
        If quien.Inventario.Llaves < 1 Then Return False
        _Suelo = ElSuelo.Accesible
        Return True
    End Function
    ''' <summary>
    ''' Abre o cierra puertas sin pedir la llave.
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub AbrirOCerrarPuertaSinLlave()
        If Me._Suelo = ElSuelo.Inaccesible Then
            Me._Suelo = ElSuelo.Accesible
        Else
            Me._Suelo = ElSuelo.Inaccesible
        End If
    End Sub
    Public Overloads Shared Function Equals(ByVal PuertaA As clCasillaPuerta, ByVal PuertaB As clCasillaPuerta) As Boolean
        Return PuertaA.GetType = PuertaB.GetType And PuertaA.Control.Name = PuertaB.Control.Name
    End Function
    Public Overloads Function Equals(ByVal PuertaB As clCasillaPuerta) As Boolean Implements System.IEquatable(Of clCasillaPuerta).Equals
        Return clCasilla.Equals(Me, PuertaB)
    End Function
End Class
